// Set the position of the popup window based on the anchor
function PopupWindow_getXYPosition( anchorname )
{
	var coordinates;
	
	if( this.type == "WINDOW" )	coordinates = getAnchorWindowPosition( anchorname );
	else                        coordinates = getAnchorPosition( anchorname );


	this.x = coordinates.x;
	this.y = coordinates.y;
}

// Set width/height of DIV/popup window
function PopupWindow_setSize( width, height )
{
	this.width  = width;
	this.height = height;
}

// Fill the window with contents
function PopupWindow_populate( contents )
{
	this.contents  = contents;
	this.populated = false;
}

// Refresh the displayed contents of the popup
function PopupWindow_refresh()
{
	if( this.divName != null )
	{
		// refresh the DIV object
		if( this.use_gebi ) document.getElementById( this.divName ).innerHTML = this.contents;
		else
			if( this.use_css ) 	document.all[this.divName].innerHTML = this.contents;
		else
		{
			if( this.use_layers )
			{ 
				var d = document.layers[this.divName]; 
				d.document.open();
				d.document.writeln( this.contents );
				d.document.close();
			}
		}
	}
	else
	{
		if( this.popupWindow != null && !this.popupWindow.closed )
		{
			this.popupWindow.document.open();
			this.popupWindow.document.writeln( this.contents );
			this.popupWindow.document.close();
		}
	}
}

// Position and show the popup, relative to an anchor object
function PopupWindow_showPopup( anchorname )
{
	this.getXYPosition( anchorname );
	
	coll = document.getElementsByTagName("SELECT");
	if (coll != null)
	{
		for (i=0; i<coll.length; i++)
		{
			coll[i].style.visibility = 'hidden';
		}
	}

	coll = document.getElementsByTagName("IFRAME");
	if (coll != null)
	{
		for (i=0; i<coll.length; i++)
		{
			coll[i].style.visibility = 'hidden';
		}
	}

	if (this.firstshow)
	 {
		this.x += this.offsetX;
		this.y += this.offsetY;
		this.firstshow = false;
	}
	
	if( !this.populated && ( this.contents != "" ) )
	{
		this.populated = true;
		this.refresh();
	}

	if( this.divName != null )
	{
		// Show the DIV object
		if( this.use_gebi )
		{
			document.getElementById( this.divName ).style.left			= this.x;
			document.getElementById( this.divName ).style.top			= this.y;
			document.getElementById( this.divName ).style.visibility	= "visible";
			document.getElementById( this.divName ).style.zIndex		= 999;
		}
		else
			if( this.use_css )
			{
				document.all[this.divName].style.left		= this.x;
				document.all[this.divName].style.top		= this.y;
				document.all[this.divName].style.visibility = "visible";
				document.all[this.divName].style.zIndex		= 999;
			}
		else
		{
			if( this.use_layers )
			{
				document.layers[this.divName].left			= this.x;
				document.layers[this.divName].top			= this.y;
				document.layers[this.divName].visibility	= "visible";
				document.layers[this.divName].zIndex		= 999;
			}
		}
	}
	else
	{
		if( this.popupWindow == null || this.popupWindow.closed )
		{
			// If the popup window will go off-screen, move it so it doesn't
			if( screen && screen.availHeight )
			{
				if( (this.y + this.height) > screen.availHeight )
				{
					this.y = screen.availHeight - this.height;
				}
			}
			
			if( screen && screen.availWidth )
			{
				if( (this.x + this.width) > screen.availWidth )
				{
					this.x = screen.availWidth - this.width;
				}
			}
			
			this.popupWindow = window.open( "about:blank", "window_" + anchorname,
			"resizable=no,toolbar=no,location=no,status=no,menubar=no,scrollbars=auto,alwaysRaised,dependent,titlebar=no,width="+this.width+",height="+this.height+",screenX="+this.x+",left="+this.x+",screenY="+this.y+",top="+this.y+"");
			
		}
	this.refresh();
	}
}


// Hide the popup
function PopupWindow_hidePopup()
{
	if( this.divName != null )
	{
		if( this.use_gebi )
		{
			document.getElementById(this.divName).style.visibility = "hidden";
		}
		else
		{
			if( this.use_css )
			{
				document.all[this.divName].style.visibility = "hidden";
			}
			else
			{
				if( this.use_layers )
				{
					document.layers[this.divName].visibility = "hidden";
				}
			}
		}

		coll = document.getElementsByTagName("SELECT");

		for (i=0; i<coll.length; i++)
		{
			// voor de 2 pull-down boxjes in de selectie-layer van de agenda
			if (coll[i].id != "grootte" && coll[i].id != "objecten")
				coll[i].style.visibility = 'visible';
		}

		coll = document.getElementsByTagName("IFRAME");
		for (i=0; i<coll.length; i++)
		{
			coll[i].style.visibility = 'visible';
		}
	}
	else
	{
		if( this.popupWindow && !this.popupWindow.closed )
		{
			this.popupWindow.close();
			this.popupWindow = null;
		}
	}
}


// Pass an event and return whether or not it was the popup DIV that was clicked
function PopupWindow_isClicked( e )
{
	if( this.divName != null )
	{
		if( this.use_layers )
		{
			var clickX = e.pageX;
			var clickY = e.pageY;
			
			var t = document.layers[this.divName];
			
			if( (clickX > t.left) && (clickX < t.left+t.clip.width) &&
			    (clickY > t.top)  && (clickY < t.top+t.clip.height) )
			{
				return true;
			}
			else
			{
				return false;
			}
		}
		else
		{
			// Need to hard-code this to trap IE for error-handling
			if( document.all )
			{ 
			
				var t = window.event.srcElement;
				
				while( t.parentElement != null )
				{
					if( t.id == this.divName )	return true;
					t = t.parentElement;
				}
				return false;
			}
			else
			{
				if( this.use_gebi && e != null )
				{
					var t = e.originalTarget;
					while( t.parentNode != null )
					{
						if( t.id == this.divName ) return true;
						t = t.parentNode;
					}
					return false;
				}
				return false;
			}
			return false;
		}
	}
}


// Check an onMouseDown event to see if we should hide
function PopupWindow_hideIfNotClicked( e )
{
	if( this.autoHideEnabled && !this.isClicked( e ) ) this.hidePopup();
}

// Call this to make the DIV disable automatically when mouse is clicked outside it
function PopupWindow_autoHide()
{
	this.autoHideEnabled = true;
}

// This global function checks all PopupWindow objects onmouseup to see if they should be hidden
function PopupWindow_hidePopupWindows( e )
{
	for( var i = 0; i < popupWindowObjects.length; i++ )
	{
		if( popupWindowObjects[i] != null )
		{
			var p = popupWindowObjects[i];
			p.hideIfNotClicked( e );
		}
	}
}

// Run this immediately to attach the event listener
function PopupWindow_attachListener()
{
	if( document.layers )
	{
		document.captureEvents( Event.MOUSEUP );
	}
	
	window.popupWindowOldEventListener = document.onmouseup;
	
	if( window.popupWindowOldEventListener != null )
	{
		document.onmouseup = new Function( "window.popupWindowOldEventListener(); PopupWindow_hidePopupWindows();" );
	}
	else
	{
		document.onmouseup = PopupWindow_hidePopupWindows;
	}
} 

// CONSTRUCTOR for the PopupWindow object
// Pass it a DIV name to use a DHTML popup, otherwise will default to window popup
function PopupWindow()
{
	if( !window.popupWindowIndex )   window.popupWindowIndex = 0;
	if( !window.popupWindowObjects ) window.popupWindowObjects = new Array();
	
	if( !window.listenerAttached )
	{
		window.listenerAttached = true;
		PopupWindow_attachListener();
	}
	
	this.index = popupWindowIndex++;
	popupWindowObjects[this.index] = this;
	this.divName = null;
	this.popupWindow = null;
	this.width = 0;
	this.height = 0;
	this.populated = false;
	this.visible = false;
	this.autoHideEnabled = false;
	
	this.contents = "";
	
	if( arguments.length > 0 )
	{
		this.type="DIV";
		this.divName = arguments[0];
	}
	else this.type="WINDOW";
	
	this.use_gebi = false;
	this.use_css = false;
	this.use_layers = false;
	
	if( document.getElementById ) this.use_gebi = true;
	else if (document.all)		this.use_css = true;
	else if (document.layers)	this.use_layers = true;
	else this.type = "WINDOW";
	
	this.offsetX = 0;
	this.offsetY = 0;
	this.firstshow = true;
	
	// Method mappings
	this.getXYPosition		= PopupWindow_getXYPosition;
	this.populate			= PopupWindow_populate;
	this.refresh			= PopupWindow_refresh;
	this.showPopup			= PopupWindow_showPopup;
	this.hidePopup			= PopupWindow_hidePopup;
	this.setSize			= PopupWindow_setSize;
	this.isClicked			= PopupWindow_isClicked;
	this.autoHide			= PopupWindow_autoHide;
	this.hideIfNotClicked	= PopupWindow_hideIfNotClicked;
}

